草庐IT

java treeset 抛出 illegalArgumentException : key out of range

全部标签

c++ - 当代码不严格符合标准时,如何强制 clang 抛出错误?

我正在编写一个C++11库,我希望它能与支持C++11的每个编译器一起使用。我不想不小心编写不标准的代码(例如使用VLA或block等语言扩展)。如何强制clang禁用所有语言扩展,以便我只能编写一致的代码? 最佳答案 尝试oneofthese:-pedantic:Warnonlanguageextensions.-pedantic-errors:Erroronlanguageextensions. 关于c++-当代码不严格符合标准时,如何强制clang抛出错误?,我们在StackOve

c++ - 在什么情况下 delete 运算符会抛出错误?

在我的链表实现中,删除内部类Node实例的辅助函数deleteNode(Node*)抛出运行时错误,通过“触发断点”在VS2015的本地Windows调试器中。我小心地匹配我的new和delete运算符。范围/引用是否发挥了我没有意识到的作用?即使clear()中存在逻辑错误并且deleteNode()被传递给nullptr,它也不应该抛出错误删除nullptr,然后将nullptr赋值给自己吧?该删除有什么问题?classLinkedList{public:LinkedList():head(nullptr){}~LinkedList(){clear();}voidpush_fron

C++:如果抛出异常,超出范围的对象是否被销毁?

通常它会在作用域结束时被销毁。但是如果抛出异常,我可以看到会发生问题。 最佳答案 是的。C++标准n333715异常处理§15.2构造函数和析构函数1)Ascontrolpassesfromathrow-expressiontoahandler,destructorsareinvokedforallautomaticobjectsconstructedsincethetryblockwasentered.Theautomaticobjectsaredestroyedinthereverseorderofthecompletionof

c++ - vector 和 map 抛出异常

我的任务是输出所有十位数字,其中数字不重复。我首先使用的是这样的东西:#include#include#include#include#includeusingnamespacestd;voidTask5(){autoinitialization=[](map*m,intcount){for(inti=0;i*m,intcount,intvalue){for(inti=9;i>count;--i)m[count][i][value]=false;};/*Forcreatecopymap*/automould=[](map*m,map*m_copy,intcount)->map*{if(

c++ - 外部 "C"DLL : Debug is OK, 发布抛出错误 C2059

我有一个作为C++Win32应用程序创建的DLL。为了防止在我的DLL中出现名称混淆,我使用了下面定义的EXPORT定义:#ifndefEXPORT#defineEXPORTextern"C"__declspec(dllexport)#endifEXPORTint_stdcallSteadyFor(doublePar[],doubleInlet[],doubleOutlet[]);为了编译这段代码,我必须进入项目的属性并将C/C++CallingConvention设置为__stdcall(/Gz)并设置CompileAs到CompileasC++Code(/TP)。这在Debug模式

c++ - 为什么这个程序抛出 'std::system_error' ?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whydoesthissimplestd::threadexamplenotwork?代码:#include#includevoidf(){std::cout问题:$g++-othread_testthread_test.cpp-std=c++0x$./thread_testterminatecalledafterthrowinganinstanceof'std::system_error'what():OperationnotpermittedAbortado“Abortado”在我的语言环境中表示“中止”

c++ - 在 Cygwin 上执行的程序不报告抛出的异常

当我运行如下所示的简单程序时,我在Cygwin和Ubuntu操作系统上得到了不同的终端输出。#include#include#includeusingnamespacestd;doublesquare_root(doublex){if(x在Cygwin上,与Ubuntu不同,我没有收到任何表明抛出异常的消息。这可能是什么原因?是否需要为Cygwin下载一些东西,以便它按预期处理异常?我在GCC4.9.0中使用Cygwin1.7.30版。在Ubuntu上,我有版本13.10和GCC4.8.1。我怀疑在这种情况下编译器的差异是否重要。 最佳答案

c++ - 按值或引用抛出异常

来自这个答案https://stackoverflow.com/a/36738405/4523099:Athrow-expressionwithnooperandrethrowsthecurrentlyhandledexception.Theexceptionisreactivatedwiththeexistingtemporary;nonewtemporaryexceptionobjectiscreated.--ISO/IEC14882:2011Section15.1par.8那么为什么我会从这段代码中得到这个结果?代码:#includeclassmy_exception:publi

c++ - 如何处理抛出异常的文件析构函数?

关闭正在写入的文件时检测错误很重要,因为数据的最后一部分可能会在关闭期间被刷新,如果它丢失,那么您最后一次写入实际上失败了,应该有人知道这件事.文件对象的析构函数是自动关闭它的好地方,但人们说不要从析构函数中抛出异常,所以如果关闭失败那么你怎么知道呢?我听说有人建议手动调用文件的close()方法。这听起来不错,除了如果多个文件的close()方法在这种情况下全部失败会发生什么:MyFilex(0),y(1),z(2);x.close();y.close();z.close();?好吧,如果“x”的close()方法抛出异常,那么您已经很好地维护了避免在“x”的析构函数中抛出异常的规则

c++ - 如果在构造函数中抛出异常,为对象分配的内存是否会自动删除?

假设有这段代码:classCFoo{public:CFoo(){iBar=newCBar();}private:CBar*iBar;};....CFoo*foo=newCFoo();当上面的行被执行时,首先分配内存来保存CFoo对象。但是如果newCBar()行抛出异常(由于内存不足),系统会自动释放之前分配给CFoo对象的内存吗?我认为它必须,但找不到任何明确的引用资料。如果没有,编码器如何释放内存,因为它不会分配给foo? 最佳答案 是的,分配给CFoo对象的内存在这种情况下将被释放。由于分配失败导致的异常导致CFoo构造函数无